3、三羊献瑞

题目 三羊献瑞

image-8daa6c81

思路分析

可以直接暴力枚举每个数

可以观察一下

三能进到五位 说明他一定是1

再往后分析 祥+三(1)能进位 说明一定是9 然后羊一定是0

后面就分析不出什么了 直接循环加上

image-13c32bac

验算一下就行了 因为它说答案唯一

这道题刷真题卷的时候用的是纯暴力把每个数都套1~9

代码极其夸张

其实可以套用dfs全排列枚举的思路 因为每个字都在0~9之间 且不重复

所以可以先做出全排列 再想办法套给每个字

image-d0bb2f6c

代码实现

暴力枚举解法

#include<bits/stdc++.h>

using namespace std;

int main()

{

	int xiang,rui,sheng,hui,san,yang,xian,qi;

	san=1;

	int num1,num2,res;

	for(xiang=0;xiang<=9;xiang++){

		for(rui=0;rui<=9;rui++){

			for(sheng=0;sheng<=9;sheng++){

				for(hui=0;hui<=9;hui++){

					for(yang=0;yang<=9;yang++){

						for(xian=0;xian<=9;xian++){

							for(qi=0;qi<=9;qi++){

								if(xiang!=rui && xiang!=sheng && xiang!=hui && xiang!=san && xiang!=yang && xiang!=xian && xiang!=qi

									&&

								   rui!=sheng && rui!=hui && rui!=san && rui!=yang && rui!=xian && rui!=qi

								    &&

								   sheng!=hui && sheng!=san && sheng!=yang && sheng!=xian && sheng!=qi

								    &&

								   hui!=san && hui!=san && hui!=yang && hui!=xian && hui!=qi

								    &&

								   yang!=san && yang!=xian && yang!=qi

								   	&&

								   xian!=qi && xian!=san

								    &&

								   qi!=san){

								   	num1=xiang*1000+rui*100+sheng*10+hui;

								   	num2=san*1000+yang*100+xian*10+rui;

								   	res=san*10000+yang*1000+sheng*100+rui*10+qi;

								   	if(res==num1+num2)

								   		cout<<san<<yang<<xian<<rui<<endl;

								   }

							}

						}

					}

				}

			}

		}

	}

	return 0;

}

dfs暴搜

#include<bits/stdc++.h>

using namespace std;

const int N=10;

int alls[N];

bool st[N];

int ans;

void dfs(int u){

  if(u==9){

    int A=alls[0]*1000+alls[1]*100+alls[2]*10+alls[3];

    int B=alls[4]*1000+alls[5]*100+alls[6]*10+alls[1];

    int C=alls[4]*10000+alls[5]*1000+alls[2]*100+alls[1]*10+alls[7];

    if(A+B==C && B>1000)

      ans=B;

    return;

  }

  for(int i=0;i<=9;i++){

    if(!st[i]){

      st[i]=true;

      alls[u]=i;

      dfs(u+1);

      alls[u]=0;

      st[i]=false;

    }

  }

}

int main()

{

  dfs(0);

  cout<<ans;

  return 0;

}

next_permutation

#include<bits/stdc++.h>

using namespace std;

vector<int> alls={0,1,2,3,4,5,6,7,8,9};

int main()

{

  do{

    int A=alls[0]*1000+alls[1]*100+alls[2]*10+alls[3];

    int B=alls[4]*1000+alls[5]*100+alls[6]*10+alls[1];

    int C=alls[4]*10000+alls[5]*1000+alls[2]*100+alls[1]*10+alls[7];

    if(A+B==C && B>1000){

      cout<<B;

      return 0;

    }

  }while(next_permutation(alls.begin(),alls.end()));

  return 0;

}

同类题型

视频讲解


⬅️ 2、星系炸弹 🏠 00-刷题理模型 ➡️ 4、移动距离